package io.renren.common.jnkt;

import com.sun.jna.Callback;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.ptr.IntByReference;

import java.nio.ByteBuffer;

public interface JNADll extends Library {

	public static String dllName = "KTLPRsdk.dll";// 动态库名字
    JNADll INSTANCE = (JNADll) Native.loadLibrary(dllName, JNADll.class);

    //获取版本
    String ktparkGetSDKVersion();
    
    //设置通讯方式 1-IP通讯 ，2-ID通讯
    int ktparkSetCommunicateWay(int ComWay);
    
	//开启或关闭相机日志接收模块
	int ktparkEnableRecvCameraLog(int flag);
    //保存日志 图片
    // 是否保存操作日志
    int ktparkEnableSaveLog(int SaveFlag, int MainType, int SubTyp, String logFilePath);

    // 是否保存抓拍图片
    int ktparkEnableSaveImage(int SaveFlag, String ImagePath);

	// 设置保存软加密注册码文件的路径
	int ktparkSetSoftEncryptPath(String FilePath);

//网络连接
    //初始化
    int SocketInit(int port);

    //关闭
    int SocketClose();

    // 获取网络中相机
    int getKTCAMinfo(String[] IP_Str, int ipNum);

    // 获取网络中LED控制卡
    int getNetLEDinfo(String[] IP_Str, int ipNum);
    // 设置显示网络屏内容
    int ktparkNetLedShow(String ip, String ShowInfo);



    //获取相机版本
    int ktparkGetVersion(String ip, ByteBuffer camVer);

    //重启相机
    int ktparkReboot(String ip);

//道闸 地感
    //开闸
    int ktparkOpen(String ip);

    //强制开闸
    int ktparkCompelOpen(String CAMIP);

    //关闸
    int ktparkClose(String ip);

    //道闸恢复指令控制
    int ktparkRevert(String ip);
//白名单
    //导入白名单
    int ktparkImportWhiteList(String Device, String WhiteListPath);
    //查询白名单导入进度
    int ktparkQueryWhiteListProgress(String Device, IntByReference Progress, IntByReference State);
//屏相关
    /**
     *  入场led显示剩余车位
     * @param ip
     * @param colourType
     * @param showType
     * @param showContext
     * @return
     */
    int ktparkLedShow_Z3(String ip, int colourType, int showType, int showContext);

    /**
     * 出场led显示
     * @param IP
     * @param colourType
     * @param inTime
     * @param outTime
     * @param inAdd
     * @param outAdd
     * @param chargeMoney
     * @param carType
     * @param showContext
     * @param showType
     * @param carNumber
     * @param cardNumber
     * @param timeContext
     * @param yearContext
     * @return
     */
    int ktparkLedShow_P(String IP, int colourType, String inTime, String outTime, String inAdd, String outAdd,
                        String chargeMoney, int carType, String showContext, int showType, String carNumber,
                        String cardNumber, String timeContext, String yearContext);
    /**
     * 发送led显示
     *
     * @param ip ip
     * @param ShowInfo 内容
     * @return
     */
    int ktparkLedShow(String IP, String ShowInfo);

    /**
     * 发送led显示
     *
     * @param ip ip
     * @param data 内容
     * @return
     */
    int ktparkLedShow_ZF1(String ip, String data);

    /**
     * 设置语音信息
     *
     * @param ip ip
     * @param voiceSpeed 语速
     * @param intonation 语调
     * @param volume 音量
     * @param timbre 发音人
     * @param baseOn ：0：LED 屏根据屏显示内容播报语音内容 1：Led 屏根据语音指令播报内容
     * @return yb
     */
    int ktVoiceSetting(String ip, int voiceSpeed, int intonation, int volume, int timbre, int baseOn);

    /**
     * 播报语音内容
     *
     * @param ip ip
     * @param breakOff 是否可以被中断
     * @param voiceInfo 语音内容
     * @return yb
     */
    int ktBroadcastContent(String ip, int breakOff, String voiceInfo);

    //抓图
    int CaptureImage(String ip);

    //设置回调
    int InitKTRecvImageCallbackFun(IPlateCallback RecvImageCallback);

    //车牌回调函数声明
    public interface IPlateCallback extends Callback {
        public void apply(String cameraIp, ByteByReference dataBuf, int dataLen, String fileName,
                          int carColor, String carPlate, int plateReliability, String seriaNo,
                          int imageType, int left, int top, int right, int bottom);
    }

    //查询地感设备和道闸设备状态或信号
    int ktparkQueryStatus(String ip);
    //设置回调
    int InitKTQueryDeviceStateCallbackFun(IPSignalAndState SignalAndStateCallback);
    //设备状态或信号查询回调
    public interface IPSignalAndState extends Callback {
    	public void Query1111(String ip, ByteByReference BarrierGate, ByteByReference SenseCoil);
    }
}
